﻿using System;
using System.Collections.Generic;
using Android.Views;
using Android.App;
using Android.OS;
using Android.Content.PM;
using Android.Content;
using Android.Graphics;

namespace VisualTrain
{
	[Activity (Label = "Рисование")]
	public class Draw : Activity
	{
		protected override void OnCreate(Bundle bundle)
		{
			this.RequestedOrientation = ScreenOrientation.Landscape;	// Устанавливаем ориентацию в горизонтальную
			base.OnCreate(bundle);
			this.RequestWindowFeature ( WindowFeatures.NoTitle );		// Убираем заголовок
			SetContentView (new paints (this));							// Указываем слой отображения
		}
	}

	public class paints : View
	{
		List<DateTime> items;
		int time_x = 50,		// Временная координата для отладки. На неё ещё есть планы
			last_x = -1,		// Координаты старой точки касания. С начала "-1", потому что касания экрана
			left,				// Расположение границы отсчёта
			half;				// Расположения оси X

		static int section_width,			// Ширина одного деления
				section_height,				// Высота одного деления
				width,						// Ширина области рисования
				height,						// Высота области рисования
				border_left,				// Левая граница, за которую нельзя выйти
				border_right;				// Правая граница, за которую нельзя выйти

		public paints(Context context) : base(context)
		{
			items = new List<DateTime> ();
			items = Student.LabCourse.Lab.CompleteDT;

			border_left = ( items [items.Count - 1] - items [0] ).Days;
		}

		// Всё рисование происходит тут
		protected override void OnDraw (Android.Graphics.Canvas canvas)
		{
			width = Width;								// Ширина области рисования
			height = Height;							// Высота области рисования
			left = 20;									// Расположение границы отсчёта
			half = height / 2;							// Расположения оси X
			section_width = (width - left) / 12;		// Ширина одного деления по горизонтали
			section_height = (height - 50) / 12;		// Высота одного деления по вертикали

			// Заполняем информацию для рисования
			var Line = new Paint ();
			Line.SetARGB (255, 255, 255, 255);		// Цвет (Белый)
			Line.SetStyle (Paint.Style.Stroke);		// Стиль линии
			Line.StrokeWidth = 4;					// Ширина линии

			// Рисуем оси координат
			canvas.DrawLine (left, 0, left, Height, Line);		// Ось Y
			canvas.DrawLine (0, half, Width, half, Line);		// Ось X
			// ---------------------------------------------------
			// Временная линия (для отладки)
			canvas.DrawLine (time_x, 0, time_x, Height, Line);

			//Рисуем графики (Пока только один)
			for ( int i = 0; i < 5; ++i )
			{

			}

			var graph = new Paint ();
			graph.SetARGB (255, 0, 0, 255);				// Цвет линии
			graph.SetStyle (Paint.Style.Stroke);		// Стиль
			graph.StrokeWidth = 1;						// Толщина линии

			// Отладка (временно)
			canvas.DrawText ( time_x.ToString(), 50.0f, 50.0f, graph );		// Координата временного X
			canvas.DrawText ( width.ToString(), 50.0f, 70.0f, graph );		// Ширина экрана
		}

		// Обработка нажатия на экран
		public override bool OnTouchEvent (MotionEvent e)
		{
			int x = (int)e.GetX();		// Получаем точку прикосновения по X
			switch (e.Action) {			// Проверяем действия
				// Нажали на экран
				case MotionEventActions.Down:
				break;
				// Сдвинули палец
				case MotionEventActions.Move:
					// Проверяем  было ли косание до этого?
					if (last_x == -1)		// Косания не было. Это первое касание
					{
						// Текущее положение становиться последним
						last_x = x;
					} else					// Косание было. Сдвигаем график, при передвижении пальца
						// Проверяем, чтобы передвижение было больше 1 пикселя
						if (Math.Abs (x - last_x) > 1)
						{
							// Проверяем не выходит ли график за границы (прокрутка графика)
							if ( (time_x + (x - last_x) >= left) && (time_x + (x - last_x) <= width))
								time_x += (x - last_x);		// Временный X изменяется
							last_x = x;		// Текущие положение становится последним
							Invalidate ();	// Перерисовываем всё
						}
				break;
				case MotionEventActions.Up:
					// Точка последнего положения пальца
					last_x = -1;
				break;
			}
			// Нажатие обработано
			return true;
		}
	}
}